/**
 * axios 封装请求工具
 */
import axios from 'axios'

// 导入路由
import router from '../router'

// 导入crypto加密工具类
import {SecretUtil} from './secret'
// 导入websocket通信
import './websocket'

import jsonBig from 'json-bigint'
import {Message,MessageBox} from "element-ui"
import fa from "element-ui/src/locale/lang/fa";
import {disconnectClient} from "./websocket";
import ca from "element-ui/src/locale/lang/ca";

import {admin_host,admin_port} from '@/utils/constant'

const request = axios.create({
    baseURL: 'http://'+ admin_host +':'+admin_port+'/',
    // 处理大数字问题：后端id：83728173821738271  前端获取会丢失精度
    // transformResponse: [function (data) {
    //     // Do whatever you want to transform the data
    //     try{
    //         // 如果转换成功，则返回转换成功的
    //         return jsonBig.parse(data)
    //     }catch (e) {
    //         // 如果转换失败，则包装为统一数据格式并返回
    //         return data
    //     }
    //
    // }]
})

// 请求拦截器
request.interceptors.request.use(function (config) {
    // 所有请求都会经过这里拦截
    const token = window.localStorage.getItem("ww-token")
    if(token){
        config.headers.jwtHead = token
    }
    const isUpload = config.headers.img
    if(config.data && isUpload !== "upload"){
        config.data = {
            encryptData: SecretUtil.aesEncrypt(JSON.stringify(config.data))
        }
    }
    // config.headers.secretKey = "ww6933@sina.com."
    // 将所有请求添加headers 中添加 token参数
    return config
}, function (error) {
    // 请求失败会经过这里拦截
    return Promise.reject(error)
})

let loginState = true
// 响应拦截器
request.interceptors.response.use(function (response) {
    const code = response.data.code
    // 不执行
    if (code === -444) {
        if(loginState) {
            loginState = false
            try {
                disconnectClient()
            }catch (e) {

            }
            MessageBox.alert('登录超时！请重新登录', '温馨提示', {
                confirmButtonText: '确定',
                showClose: false,
                type: 'warning'
            }).then(() => {
                window.localStorage.removeItem('ww-token')
                window.localStorage.removeItem(window.localStorage.getItem("ww-token"))
                router.push('/login')
            })
        }
    }
    return response;
}, function (error) {
    let msg = 'UnknownError'
    const res = error.response
    if (res) {
        msg = errorMessage.find((t) => t.code === res.status).msg || msg
        if (res.status === 401 || res.status === 403) {
            window.location.href = request.baseURL
        } else {
            Message.error(msg || '请求异常')
        }
    } else {
        Message.error(error.message || '请求异常') // 消息为空
    }
    return Promise.reject(error)
})

// HTTP CODE及错误提示
const errorMessage = [
    { code: 400, msg: '请求错误' },
    { code: 401, msg: '未授权，请登录' },
    { code: 403, msg: '拒绝访问' },
    { code: 404, msg: '请求地址出错' },
    { code: 408, msg: '请求超时' },
    { code: 500, msg: '服务器内部错误' },
    { code: 501, msg: '服务未实现' },
    { code: 502, msg: '网关错误' },
    { code: 503, msg: '服务不可用' },
    { code: 504, msg: '网关超时' },
    { code: 505, msg: 'HTTP版本不受支持' }
]

export default request

// 如需使用 直接导入 import request from './utils/request.js'
